print("-------9.4.1 导入单个类--------------")
# import 语句让 Python 打开模块 car 并导入其中的 Car 类。
# 这行代码让 Python 在当前运行的程序文件中使用该模块中的代码。
from car import Car

my_new_car = Car('audi', 'a4', 2016)
print(my_new_car.get_descriptive_name())

my_new_car.odometer_reading = 23
my_new_car.read_odometer()

my_new_car.update_odometer(23500)
my_new_car.read_odometer()

# 可以根据需要在一个模块中存储任意数量的类
from car import ElectricCar
print("-------9.4.2 在一个模块中存储多个类--------------")
my_lean_car = ElectricCar('tesla', 'model s', 2019)
print(my_lean_car.get_descriptive_name())
my_lean_car.battery.describe_battery()
my_lean_car.battery.get_range()


print("-------9.4.3 从一个模块中导入多个类--------------")
# 当从一个模块中导入多个类时，用逗号分隔各个类
from car import Car, ElectricCar
my_beetle = Car('volkswagen', 'beetle', 2019)
print(my_beetle.get_descriptive_name())
my_tesla = ElectricCar('tesla', 'roadster', 2019)
print(my_tesla.get_descriptive_name())

print("-------9.4.4 导入整个模块--------------")
# 可以先导入整个模块，再使用点号访问需要的类。
import car
my_beetle = car.Car('volkswagen', 'beetle', 2019)
print(my_beetle.get_descriptive_name())
my_tesla = car.ElectricCar('tesla', 'roadster', 2019)
print(my_tesla.get_descriptive_name())

print("-------9.4.5 导入模块中的所有类--------------")
# 导入整个模块时，使用下面的语法：
# from module_name import *
# 不推荐使用这种导入方式，因为导入了很多类，不清楚有哪些类可用，
# 而且这种导入方式还可能引发名称方面的困惑。
# 最好的方式是，要么只导入你需要使用的类，要么导入整个模块并使用模块名称来调用需要的类。

# 当需要从一个模块中导入很多类时，还是最好在导入整个模块之后使用module_name.classname 语法来访问这些类。

print("-------9.4.6 在一个模块中导入另一个模块--------------")
# 有时候，需要将类分散到多个模块中，以免模块太大，或在同一个模块中存储不相关的类。
# 将类存储在多个模块中时，你可能会发现一个模块中的类依赖于另一个模块中的类。
from electric_car import BydElectricCar
from electric_car import BydBattery

my_beetle = Car('volkswagen', 'beetle', 2019)
print(my_beetle.get_descriptive_name())

my_byd = BydElectricCar('tesla', 'roadster', 2019)
print(my_byd.get_descriptive_name())

my_byd.battery.describe_battery()

print("-------9.4.7 使用别名--------------")
# 在导入类时，也可以给它指定别名。
from electric_car import BydElectricCar as Byd
my_byd = Byd('tesla', 'roadster', 2019)
print(my_byd.get_descriptive_name())

# 还可以给模块指定别名
import electric_car as ec
my_byd = ec.BydElectricCar('tesla', 'roadster', 2019)
print(my_byd.get_descriptive_name())

